package cauca.scsn.modelo.entidad;

import java.util.HashSet;
import java.util.Set;

import javax.faces.bean.ManagedBean;
import javax.faces.bean.RequestScoped;
import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.OneToMany;
import javax.persistence.Table;

/**
 * Vehiculo entity. @author MyEclipse Persistence Tools
 */
@Entity
@Table(name = "vehiculo", schema = "public")
@ManagedBean
@RequestScoped
public class Vehiculo extends EntidadGenerica {

	// Fields

	private Integer idVehiculo;
	private Empresa empresa;
	private ModeloVehiculo modeloVehiculo;
	private EsquemaEje esquemaEje;
	private String placa;
	private String anoFabricacion;
	private Double kilometraje;
	private Set<RutaVehiculo> rutaVehiculos = new HashSet<RutaVehiculo>(0);
	private Set<VehiculoEmpleado> vehiculoEmpleados = new HashSet<VehiculoEmpleado>(
			0);
	private Set<Movimiento> movimientos = new HashSet<Movimiento>(0);

	// Constructors

	/** default constructor */
	public Vehiculo() {
	}

	/** minimal constructor */
	public Vehiculo(Integer idVehiculo, Empresa empresa,
			ModeloVehiculo modeloVehiculo, EsquemaEje esquemaEje, String placa,
			Double kilometraje, String status) {
		this.idVehiculo = idVehiculo;
		this.empresa = empresa;
		this.modeloVehiculo = modeloVehiculo;
		this.esquemaEje = esquemaEje;
		this.placa = placa;
		this.kilometraje = kilometraje;
		this.status = status;
	}

	/** full constructor */
	public Vehiculo(Integer idVehiculo, Empresa empresa,
			ModeloVehiculo modeloVehiculo, EsquemaEje esquemaEje, String placa,
			String anoFabricacion, Double kilometraje, String status,
			Set<RutaVehiculo> rutaVehiculos,
			Set<VehiculoEmpleado> vehiculoEmpleados, Set<Movimiento> movimientos) {
		this.idVehiculo = idVehiculo;
		this.empresa = empresa;
		this.modeloVehiculo = modeloVehiculo;
		this.esquemaEje = esquemaEje;
		this.placa = placa;
		this.anoFabricacion = anoFabricacion;
		this.kilometraje = kilometraje;
		this.status = status;
		this.rutaVehiculos = rutaVehiculos;
		this.vehiculoEmpleados = vehiculoEmpleados;
		this.movimientos = movimientos;
	}

	// Property accessors
	@Id
	@Column(name = "id_vehiculo", unique = true, nullable = false)
	public Integer getIdVehiculo() {
		return this.idVehiculo;
	}

	public void setIdVehiculo(Integer idVehiculo) {
		this.idVehiculo = idVehiculo;
	}

	@ManyToOne(fetch = FetchType.LAZY)
	@JoinColumn(name = "id_empresa", nullable = false)
	public Empresa getEmpresa() {
		return this.empresa;
	}

	public void setEmpresa(Empresa empresa) {
		this.empresa = empresa;
	}

	@ManyToOne(fetch = FetchType.LAZY)
	@JoinColumn(name = "id_modelo_vehiculo", nullable = false)
	public ModeloVehiculo getModeloVehiculo() {
		return this.modeloVehiculo;
	}

	public void setModeloVehiculo(ModeloVehiculo modeloVehiculo) {
		this.modeloVehiculo = modeloVehiculo;
	}

	@ManyToOne(fetch = FetchType.LAZY)
	@JoinColumn(name = "id_esquema_ejes", nullable = false)
	public EsquemaEje getEsquemaEje() {
		return this.esquemaEje;
	}

	public void setEsquemaEje(EsquemaEje esquemaEje) {
		this.esquemaEje = esquemaEje;
	}

	@Column(name = "placa", nullable = false, length = 10)
	public String getPlaca() {
		return this.placa;
	}

	public void setPlaca(String placa) {
		this.placa = placa;
	}

	@Column(name = "ano_fabricacion", length = 5)
	public String getAnoFabricacion() {
		return this.anoFabricacion;
	}

	public void setAnoFabricacion(String anoFabricacion) {
		this.anoFabricacion = anoFabricacion;
	}

	@Column(name = "kilometraje", nullable = false, precision = 17, scale = 17)
	public Double getKilometraje() {
		return this.kilometraje;
	}

	public void setKilometraje(Double kilometraje) {
		this.kilometraje = kilometraje;
	}

	@Column(name = "status", nullable = false, length = 1)
	public String getStatus() {
		return this.status;
	}

	public void setStatus(String status) {
		this.status = status;
	}

	@OneToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY, mappedBy = "vehiculo")
	public Set<RutaVehiculo> getRutaVehiculos() {
		return this.rutaVehiculos;
	}

	public void setRutaVehiculos(Set<RutaVehiculo> rutaVehiculos) {
		this.rutaVehiculos = rutaVehiculos;
	}

	@OneToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY, mappedBy = "vehiculo")
	public Set<VehiculoEmpleado> getVehiculoEmpleados() {
		return this.vehiculoEmpleados;
	}

	public void setVehiculoEmpleados(Set<VehiculoEmpleado> vehiculoEmpleados) {
		this.vehiculoEmpleados = vehiculoEmpleados;
	}

	@OneToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY, mappedBy = "vehiculo")
	public Set<Movimiento> getMovimientos() {
		return this.movimientos;
	}

	public void setMovimientos(Set<Movimiento> movimientos) {
		this.movimientos = movimientos;
	}

	@Override
	public Object getPrimaryKey() {
		return this.idVehiculo;
	}

	@Override
	public String toString() {
		return null;
	}

}